/**
 * @author Andreas Lehner
 * @file   Epcos.h
 * @brief  Declaration of the class Epcos.
 * 
 */
#ifndef EPCOS_H
#define EPCOS_H

#include <string>
#include "IEpcos.h"
#include "Object.h"
#include "Crypter.h"
#include "CrypterFactory.h"

/**
 * @class Epcos
 * @brief Adapter between the Epcos and the intern interface
 * Class Epcos implements the interface IEpcos and calls functions
 * of the intern interface
 */
class Epcos : public Object, public IEpcos {
public:
	/**
	 * @brief Constructor for class Epcos
	 * Instantiates an object of Epcos and sets variable of type Crypter* to 0
	 */
	Epcos() : mCrypter(0){};

	/**
	 * @brief Destructor for class Epcos
	 * frees allocated memory of variable of type Crypter*
	 */
	~Epcos();
	virtual void EncryptRSA(std::string const& fileName);
	virtual void DecryptRSA(std::string const& fileName);

private:
	/**
	 * @brief pointer to a Crypter object
	 * The Crypter object is created by CrypterFactory
	 * and is in case of Epcos always of type RSACrypt
	 */
	Crypter *mCrypter;
};

#endif